package com.etc.admin.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.etc.entity.Employee;
import com.etc.service.AdminLoginService;
import com.etc.utils.CommonMessage;
import com.etc.utils.SearchFace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/*
 * 文件名：com.etc.admin.controller.LoginController
 * 描述：后台管理员登录使用的控制器
 * 作者：黄志鹏
 * 时间：2019/5/23 10:20
 */
@Controller
@RequestMapping("admin.action")
public class AdminLoginController {


     //注入adminLoginservice
    @Autowired
    private AdminLoginService adminLoginService;

    /**
     * 普通登录界面跳转至人脸登录界面的方法
     * @return 人脸登录界面的路径
     */
    @RequestMapping("toFaceLogin")
    public String toFaceLogin(){
        return "admin/faceLogin";
    }

    /**
     * 人脸登录界面跳转至普通登录界面的方法
     * @return 普通登录界面的路径
     */
    @RequestMapping("toLogin")
    public String toLogin(){
        return "admin/login";
    }

    /**
     * 普通登录的方法
     * @return 登录成功或者失败的信息
     */
    @RequestMapping("doLogin")
    @ResponseBody
    public CommonMessage doLogin(String empphone, String emppassword, HttpSession session){
        //创建一个返回值对象
        CommonMessage commonMessage = new CommonMessage();

        //调用adminLoginService进行登录查询
       Employee employee =  adminLoginService.getEmployeeByEmpphoneAndEmppassword(empphone,emppassword);

       //判断是否存在用户
       if(employee!=null){
           //如果用户状态为0表示普通员工，为2表示管理员，设置返回信息及将用户信息存放在session中
           if (employee.getEmpstatus()==0 || employee.getEmpstatus()==2){

               //设置返回值信息
               commonMessage.setMsg("登录成功");

               //将员工信息存于session中
               session.setAttribute("employee",employee);

           }else if (employee.getEmpstatus()==1){//员工状态为1表示该员工已经离职
               //设置返回信息
               commonMessage.setMsg("登录失败，您已经离职");
           }
       }else {
           //没有该员工或者管理员
           commonMessage.setMsg("登录失败，账户或者密码错误");
       }
        return commonMessage;
    }


    /**
     * 人脸识别登录的方法
     * @param image 人脸图片Base64格式
     * @param session
     * @return 返回执行结果
     */
    @RequestMapping(value = "loginFace")
    @ResponseBody
    public CommonMessage loginByface(String image, HttpSession session) {
        CommonMessage cm = new CommonMessage();
        String imgStr = image;
        if (null != imgStr) {
            imgStr = imgStr.substring(imgStr.indexOf(",") + 1);
        }
        // Boolean flag = GenerateImage(imgStr, filePath, fileName);
        String result = SearchFace.search(imgStr);
        JSONObject jo = JSONObject.parseObject(result);
        Employee employee = new Employee();
        String error_msg = jo.getString("error_msg");
        // 如果SearchFace操作成功
        if (error_msg.equals("SUCCESS")) {
            String str = jo.getString("result");
            JSONObject rjo = JSONObject.parseObject(str);
            // 获取result结果中的user_list数组
            JSONArray jsonArray = rjo.getJSONArray("user_list");
            // 将JSONArray数组转为list集合
            List<String> list = new ArrayList<>();
            if (jsonArray != null) {
                for (int i = 0; i < jsonArray.size(); i++) {
                    list.add(jsonArray.getString(i));
                }
            }
            // 获取user_list中的值
            JSONObject ujo = JSONObject.parseObject(list.get(0));
            Double score = ujo.getDouble("score");
            String user_id = ujo.getString("user_id");
            String[] arr = user_id.split("_");
            // 根据获取userId
            int empid = Integer.parseInt(arr[1]);

            if (score > 90) {
                // 根据id查询用户信息
                employee = adminLoginService.faceLogin(empid);
                if(employee!=null&&(employee.getEmpstatus()==0||employee.getEmpstatus()==2)) {
                    cm.setMsg("登录成功");
                    session.setAttribute("employee", employee);
                }else if (employee!=null&& employee.getEmpstatus()==1){
                    cm.setMsg("您已离职，无法登录");
                }else {
                    cm.setMsg("没有该员工");
                }
            } else {
                cm.setMsg("人脸不存在");
            }

        } else {
            cm.setMsg("操作失败，请重新操作");
        }
        return cm;
    }

    /**
     * 退出用户的方法
     * @param session HTTPSession
     * @return 返回结果信息
     */
    @RequestMapping("exitEmployee")
    public String eixtEmployee(HttpSession session){

        //创建一个返回值对象
        CommonMessage commonMessage = new CommonMessage();

        //员工退出删除session员工信息
        session.removeAttribute("employee");

        return "redirect:login";
    }
}
